package com.tuliyou.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;

/**
 * 院校实体类（对应数据库universities表）
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("universities") // 指定对应数据库表名
public class University implements Serializable {

    /**
     * 院校代号（复合主键之一）
     * 对应表中university_code，非空
     */
    @TableId(value = "university_code", type = IdType.NONE) // 复合主键，非自增
    private String universityCode;

    /**
     * 院校名称
     * 对应表中name，非空
     */
    @TableField(value = "name")
    private String name;

    /**
     * 数据年份（复合主键之一）
     * 对应表中uni_year，非空
     */
    // @TableId(value = "uni_year", type = IdType.NONE) // 复合主键，非自增
    @TableField(value = "uni_year")
    private Integer uniYear;

    /**
     * 院校所在省份
     * 对应表中province，可为空
     */
    @TableField(value = "province")
    private String province;

    /**
     * 院校所在城市
     * 对应表中city，可为空
     */
    @TableField(value = "city")
    private String city;

    /**
     * 办学性质（枚举类型）
     * 对应表中attribute，默认"公办"
     */
    @TableField(value = "attribute", fill = FieldFill.INSERT) // 插入时默认值由数据库控制
    private String attribute; // 数据库是ENUM，Java用String接收，值需符合ENUM范围

    /**
     * 办学层次（如985、211、双非）
     * 对应表中level，可为空
     */
    @TableField(value = "level")
    private String level;

    /**
     * 是否本科（固定为true）
     * 对应表中is_undergraduate，默认true
     */
    @TableField(value = "is_undergraduate", fill = FieldFill.INSERT)
    private Boolean isUndergraduate = true; // 初始化默认值为true

    /**
     * 院校简介
     * 对应表中description，TEXT类型，可为空
     */
    @TableField(value = "description")
    private String description;

    /**
     * 官网地址
     * 对应表中official_website，可为空
     */
    @TableField(value = "official_website")
    private String officialWebsite;

    /**
     * 逻辑删除标记（0未删除，1已删除）
     * 对应表中is_deleted，默认0
     */
    @TableLogic // MyBatis-Plus逻辑删除注解：自动在查询时过滤is_deleted=1的记录
    @TableField(value = "is_deleted", fill = FieldFill.INSERT)
    private Integer isDeleted = 0; // 初始化默认值为0


    /**
     * 复合主键的序列化支持（必须实现Serializable，否则可能序列化异常）
     */
    @Serial
    private static final long serialVersionUID = 1L;
}